'use strict'

var _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault')

Object.defineProperty(exports, '__esModule', {
  value: true
})
exports.default = void 0

var _extends2 = _interopRequireDefault(require('@babel/runtime/helpers/extends'))

var _slicedToArray2 = _interopRequireDefault(require('@babel/runtime/helpers/slicedToArray'))

// MIT License from https://github.com/kaimallea/isMobile
var applePhone = /iPhone/i
var appleIpod = /iPod/i
var appleTablet = /iPad/i
var androidPhone = /\bAndroid(?:.+)Mobile\b/i // Match 'Android' AND 'Mobile'

var androidTablet = /Android/i
var amazonPhone = /\bAndroid(?:.+)SD4930UR\b/i
var amazonTablet = /\bAndroid(?:.+)(?:KF[A-Z]{2,4})\b/i
var windowsPhone = /Windows Phone/i
var windowsTablet = /\bWindows(?:.+)ARM\b/i // Match 'Windows' AND 'ARM'

var otherBlackberry = /BlackBerry/i
var otherBlackberry10 = /BB10/i
var otherOpera = /Opera Mini/i
var otherChrome = /\b(CriOS|Chrome)(?:.+)Mobile/i
var otherFirefox = /Mobile(?:.+)Firefox\b/i // Match 'Mobile' AND 'Firefox'

function match(regex, userAgent) {
  return regex.test(userAgent)
}

function isMobile(userAgent) {
  var ua = userAgent || (typeof navigator !== 'undefined' ? navigator.userAgent : '') // Facebook mobile app's integrated browser adds a bunch of strings that
  // match everything. Strip it out if it exists.

  var tmp = ua.split('[FBAN')

  if (typeof tmp[1] !== 'undefined') {
    var _tmp = tmp

    var _tmp2 = (0, _slicedToArray2.default)(_tmp, 1)

    ua = _tmp2[0]
  } // Twitter mobile app's integrated browser on iPad adds a "Twitter for
  // iPhone" string. Same probably happens on other tablet platforms.
  // This will confuse detection so strip it out if it exists.

  tmp = ua.split('Twitter')

  if (typeof tmp[1] !== 'undefined') {
    var _tmp3 = tmp

    var _tmp4 = (0, _slicedToArray2.default)(_tmp3, 1)

    ua = _tmp4[0]
  }

  var result = {
    apple: {
      phone: match(applePhone, ua) && !match(windowsPhone, ua),
      ipod: match(appleIpod, ua),
      tablet: !match(applePhone, ua) && match(appleTablet, ua) && !match(windowsPhone, ua),
      device: (match(applePhone, ua) || match(appleIpod, ua) || match(appleTablet, ua)) && !match(windowsPhone, ua)
    },
    amazon: {
      phone: match(amazonPhone, ua),
      tablet: !match(amazonPhone, ua) && match(amazonTablet, ua),
      device: match(amazonPhone, ua) || match(amazonTablet, ua)
    },
    android: {
      phone: !match(windowsPhone, ua) && match(amazonPhone, ua) || !match(windowsPhone, ua) && match(androidPhone, ua),
      tablet: !match(windowsPhone, ua) && !match(amazonPhone, ua) && !match(androidPhone, ua) && (match(amazonTablet, ua) || match(androidTablet, ua)),
      device: !match(windowsPhone, ua) && (match(amazonPhone, ua) || match(amazonTablet, ua) || match(androidPhone, ua) || match(androidTablet, ua)) || match(/\bokhttp\b/i, ua)
    },
    windows: {
      phone: match(windowsPhone, ua),
      tablet: match(windowsTablet, ua),
      device: match(windowsPhone, ua) || match(windowsTablet, ua)
    },
    other: {
      blackberry: match(otherBlackberry, ua),
      blackberry10: match(otherBlackberry10, ua),
      opera: match(otherOpera, ua),
      firefox: match(otherFirefox, ua),
      chrome: match(otherChrome, ua),
      device: match(otherBlackberry, ua) || match(otherBlackberry10, ua) || match(otherOpera, ua) || match(otherFirefox, ua) || match(otherChrome, ua)
    },
    // Additional
    any: null,
    phone: null,
    tablet: null
  }
  result.any = result.apple.device || result.android.device || result.windows.device || result.other.device // excludes 'other' devices and ipods, targeting touchscreen phones

  result.phone = result.apple.phone || result.android.phone || result.windows.phone
  result.tablet = result.apple.tablet || result.android.tablet || result.windows.tablet
  return result
}

var defaultResult = (0, _extends2.default)((0, _extends2.default)({}, isMobile()), {
  isMobile: isMobile
})
var _default = defaultResult
exports.default = _default
